

#pragma once

struct UcCell;
struct UcCellRange;
class UcDbTable;
class UcDbLinkedTableData;

class UcDbTableIterator
{
public:
    UcDbTableIterator(const UcDbTable* pTable);
    UcDbTableIterator(const UcDbTable* pTable, const UcCellRange* pRange,
        UcDb::TableIteratorOption nOption);
    UcDbTableIterator(const UcDbLinkedTableData* pTable);
    UcDbTableIterator(const UcDbLinkedTableData* pTable, const UcCellRange* pRange,
        UcDb::TableIteratorOption nOption);
    UcDbTableIterator(const UcCellRange& range);
    UcDbTableIterator(const UcCellRange& range, UcDb::TableIteratorOption nOption);
    ~UcDbTableIterator();

    void            start                   (void);
    void            step                    (void);
    bool            done                    (void);
    bool            seek                    (const UcCell& cell);
    const UcCell&   getCell                 (void) const;
    int             getRow                  (void) const;
    int             getColumn               (void) const;

protected:
    UcDbTableIterator(void);

protected:
    void        *   mpImpObj;
};
